package com.czxy.changgou3.com.czxy.changgou3.service;


import com.czxy.changgou3.com.czxy.changgou3.mapper.ImpressionMapper;
import com.czxy.changgou3.com.czxy.changgou3.mapper.SkuCommentMapper;
import com.czxy.changgou3.pojo.Impression;
import com.czxy.changgou3.pojo.PageRequest;
import com.czxy.changgou3.pojo.SkuComment;
import com.czxy.changgou3.vo.CommentResult;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by liangtong.
 */
@Service
@Transactional
public class SkuCommentService {

    @Resource
    private ImpressionMapper impressionMapper;

    @Resource
    private SkuCommentMapper skuCommentMapper;


    /**
     * 查询指定spu的所有评论
     * @param spuId
     * @param pageRequest
     * @return
     */
    public CommentResult findComments(Integer spuId, PageRequest pageRequest){
        //1 创建封装对象
        CommentResult commentResult = new CommentResult();
        //2 封装数据
        //2.1 查询执行spu的所有印象
        List<Impression> impList = impressionMapper.findAllBySpuId(spuId);
        commentResult.setImpressions(impList);

        //2.2 好评度
        // 1） 好评评论数
        Integer goodsCount = skuCommentMapper.findCommentCountByRatio(spuId, "0");
        // 2） 中评评论数
        Integer commonCount = skuCommentMapper.findCommentCountByRatio(spuId, "1");
        // 3） 差评评论数
        Integer badCount = skuCommentMapper.findCommentCountByRatio(spuId, "2");
        // 4） 所有评论数（1+2+3 或 直接查询）
        Integer total = skuCommentMapper.findNumBySpuId(spuId);
        // 5）封装计算后数据：common"、 "bad"、"goods"
        Map<String,String> ratioMap = new HashMap<>();
        if(total != 0) {  //保留2位小数
            ratioMap.put("goods", String.format("%.2f", goodsCount  * 100f  / total ));
            ratioMap.put("common", String.format("%.2f", commonCount  * 100f  / total ));
            ratioMap.put("bad", String.format("%.2f", badCount  * 100f  / total ));
        } else {
            // 6）排除没有评论（被0除）
            ratioMap.put("goods","0");
            ratioMap.put("common","0");
            ratioMap.put("bad","0");
        }
        commentResult.setRatio(ratioMap);

        // 2.3 分页
        // 1）设置分页
        PageHelper.startPage( pageRequest.getPageNum() , pageRequest.getPageSize());
        // 2）查询
        List<SkuComment> skuCommentList = skuCommentMapper.findCommentsBySpuid(spuId);
        // 3）创建PageInfo
        PageInfo<SkuComment> pageInfo = new PageInfo<>( skuCommentList );
        // 4）将结果封装到CommentResult
        commentResult.setComments(pageInfo.getList());
        commentResult.setCommentCount(pageInfo.getTotal());

        //3 返回
        return commentResult;
    }
}
